package com.aps.server.mapper;

import com.aps.server.entity.BasicProduct;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 产品信息 Mapper 接口
 * 继承 MyBatis Plus 的 BaseMapper，提供基础的 CRUD 操作
 */
@Mapper
public interface BasicProductMapper extends BaseMapper<BasicProduct> {
    
    /**
     * 根据租户ID查询产品列表
     * 
     * @param tenantId 租户ID
     * @return 产品列表
     */
    @Select("SELECT * FROM basic_product WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicProduct> selectByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID分页查询产品列表
     * 
     * @param page 分页对象
     * @param tenantId 租户ID
     * @return 分页产品列表
     */
    @Select("SELECT * FROM basic_product WHERE tenant_id = #{tenantId} ORDER BY create_time DESC")
    IPage<BasicProduct> selectPageByTenantId(Page<BasicProduct> page, @Param("tenantId") String tenantId);
    
    /**
     * 根据产品名称查询产品
     * 
     * @param productName 产品名称
     * @param tenantId 租户ID
     * @return 产品信息
     */
    @Select("SELECT * FROM basic_product WHERE product_name = #{productName} AND tenant_id = #{tenantId}")
    BasicProduct selectByProductName(@Param("productName") String productName, @Param("tenantId") String tenantId);
    
    /**
     * 根据产品类型查询产品列表
     * 
     * @param productType 产品类型
     * @param tenantId 租户ID
     * @return 产品列表
     */
    @Select("SELECT * FROM basic_product WHERE product_type = #{productType} AND tenant_id = #{tenantId} ORDER BY create_time DESC")
    List<BasicProduct> selectByProductType(@Param("productType") String productType, @Param("tenantId") String tenantId);
    
    /**
     * 根据租户ID统计产品数量
     * 
     * @param tenantId 租户ID
     * @return 产品数量
     */
    @Select("SELECT COUNT(*) FROM basic_product WHERE tenant_id = #{tenantId}")
    Long countByTenantId(@Param("tenantId") String tenantId);
    
    /**
     * 根据产品类型统计产品数量
     * 
     * @param productType 产品类型
     * @param tenantId 租户ID
     * @return 产品数量
     */
    @Select("SELECT COUNT(*) FROM basic_product WHERE product_type = #{productType} AND tenant_id = #{tenantId}")
    Long countByProductType(@Param("productType") String productType, @Param("tenantId") String tenantId);
}
